package com.aboo.po;

/**
 * @author Yata Aboo
 * @Date 2012-9-17
 * @Desc 查询时的分页参数对象
 */
public class Page {
	
	private Integer currentPageNO;
	private Integer pageSize;
	private Integer beginRecordIndex;
	private Integer endRecordIndex;
	private Integer totalRecordSize;
	private Integer totalPage;
	private Integer sectionSize;
	private Integer firstSectionPageNO;
	private Integer lastSectionPageNO;
	
	/** 当前页号 */
	public static String CURRENT_PAGE_NO = "currentPageNO";
	/** 每页包含的记录数 */
	public static String PAGE_SIZE = "pageSize";
	/** 每个扇区包含的页数 */
	public static String SECTION_SIZE = "sectionSize";
	
	/** 默认当前页号 */
	public static Integer DEFAULT_CURRENT_PAGE_NO = new Integer(1);
	/** 默认每页包含的记录数 */
	public static Integer DEFAULT_PAGE_SIZE = new Integer(20);
	/** 默认每个扇区包含的页数 */
	public static Integer DEFAULT_SECTION_SIZE = new Integer(5);
	
	/**
	 * Page构造函数
	 * @param currentPageNo 当前页号
	 * @param pageSize 每页包含的记录数
	 * @param sectionSize 每个扇区包含的页数
	 */
	public Page(Integer currentPageNo, Integer pageSize, Integer sectionSize) {
		this.currentPageNO = currentPageNo;
		this.pageSize = pageSize;
		this.sectionSize = sectionSize;
	}
	
	/**
	 * 获取当前页号
	 * @return 当前页号
	 */
	public Integer getCurrentPageNO() {
		return currentPageNO;
	}
	/**
	 * 设置当前页号
	 * @param currentPageNO 当前页号
	 */
	public void setCurrentPageNO(Integer currentPageNO) {
		this.currentPageNO = currentPageNO;
	}
	/**
	 * 获取页面包含的记录数
	 * @return 页面包含的记录数
	 */
	public Integer getPageSize() {
		return pageSize;
	}
	/**
	 * 设置页面包含的记录数
	 * @param pageSize 页面包含的记录数
	 */
	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}
	/**
	 * 获取查询时的开始记录索引
	 * @return 查询时的开始记录索引
	 */
	public Integer getBeginRecordIndex() {
		this.beginRecordIndex = (this.currentPageNO - 1) * this.pageSize;
		return beginRecordIndex;
	}
	/**
	 * 设置查询时的开始记录索引
	 * @param beginRecordIndex 查询时的开始记录索引
	 */
	public void setBeginRecordIndex(Integer beginRecordIndex) {
		this.beginRecordIndex = beginRecordIndex;
	}
	/**
	 * 获取查询时的结束记录索引
	 * @return 查询时的结束记录索引
	 */
	public Integer getEndRecordIndex() {
		this.endRecordIndex = this.currentPageNO * this.pageSize;
		return endRecordIndex;
	}
	/**
	 * 设置查询时的结束记录索引
	 * @param endRecordIndex 查询时的结束记录索引
	 */
	public void setEndRecordIndex(Integer endRecordIndex) {
		this.endRecordIndex = endRecordIndex;
	}
	/**
	 * 获取总记录数
	 * @return 总记录数
	 */
	public Integer getTotalRecordSize() {
		return totalRecordSize;
	}
	/**
	 * 设置总记录数
	 * @param totalRecordSize 总记录数
	 */
	public void setTotalRecordSize(Integer totalRecordSize) {
		this.totalRecordSize = totalRecordSize;
		
		if (totalRecordSize % this.pageSize > 0) {
			this.totalPage = (totalRecordSize / this.pageSize) + 1;
		} else {
			this.totalPage = (totalRecordSize / this.pageSize);
		}
		
		if (this.currentPageNO % this.sectionSize > 0) {
			this.firstSectionPageNO = (this.currentPageNO / this.sectionSize) * this.sectionSize + 1;
			if ((this.currentPageNO / this.sectionSize + 1) * this.sectionSize < this.totalPage) {
				this.lastSectionPageNO = (this.currentPageNO / this.sectionSize + 1) * this.sectionSize;
			} else {
				this.lastSectionPageNO = this.totalPage;
			}
		} else {
			this.firstSectionPageNO = (this.currentPageNO / this.sectionSize - 1) * this.sectionSize + 1;
			if ((this.currentPageNO / this.sectionSize) * this.sectionSize < this.totalPage) {
				this.lastSectionPageNO = (this.currentPageNO / this.sectionSize) * this.sectionSize;
			} else {
				this.lastSectionPageNO = this.totalPage;
			}
		}		
	}
	/**
	 * 获取总页数
	 * @return 总页数
	 */
	public Integer getTotalPage() {
		return totalPage;
	}
	/**
	 * 设置总页数
	 * @param totalPage 总页数
	 */
	public void setTotalPage(Integer totalPage) {
		this.totalPage = totalPage;
	}
	/**
	 * 获取扇区数
	 * @return 扇区数
	 */
	public Integer getSectionSize() {
		return sectionSize;
	}
	/**
	 * 设置扇区数
	 * @param sectionSize 扇区数
	 */
	public void setSectionSize(Integer sectionSize) {
		this.sectionSize = sectionSize;
	}
	/**
	 * 获取扇区内第一页的页号
	 * @return 扇区内第一页的页号
	 */
	public Integer getFirstSectionPageNO() {
		return firstSectionPageNO;
	}
	/**
	 * 设置扇区内第一页的页号
	 * @param firstSectionPageNO 扇区内第一页的页号
	 */
	public void setFirstSectionPageNO(Integer firstSectionPageNO) {
		this.firstSectionPageNO = firstSectionPageNO;
	}
	/**
	 * 获取扇区内最后一页的页号
	 * @return 扇区内最后一页的页号
	 */
	public Integer getLastSectionPageNO() {
		return lastSectionPageNO;
	}
	/**
	 * 设置扇区内最后一页的页号
	 * @param lastSectionPageNO 扇区内最后一页的页号
	 */
	public void setLastSectionPageNO(Integer lastSectionPageNO) {
		this.lastSectionPageNO = lastSectionPageNO;
	}
}
